package com.scg33.dominio;

import java.util.Date;
import java.util.List;
import java.util.Vector;

import org.hibernate.criterion.Restrictions;

import com.coreweb.domain.Register;
import com.coreweb.domain.Usuario;

public class RegisterDomain extends Register {

	private static RegisterDomain instance = new RegisterDomain();

	private RegisterDomain() {
	}

	public synchronized static RegisterDomain getInstance() {
		if (instance == null) {
			instance = new RegisterDomain();
		}
		return instance;
	}

	public Acceso getAcceso(String usuario, String clave) {
		Acceso out = null;
		try {
			Vector v = new Vector();
			v.add(Restrictions.eq("usuario", usuario));
			v.add(Restrictions.eq("clave", clave));

			List l = getObjects(Acceso.class.getName(), v, new Vector());
			if (l.size() == 1) {
				out = (Acceso) l.get(0);
			}

		} catch (Exception e) {
			e.printStackTrace();
			out = null;
		}
		return out;
	}

	/**
	 * Agrega un novedad a un capítulo
	 * 
	 * @param user
	 * @param titulo
	 * @param descripcion
	 * @param idCapitulo
	 * @throws Exception
	 */
	public void agregarNovedad(String user, String titulo, String descripcion,
			long idCapitulo) throws Exception {
		Capitulo c = (Capitulo) this.getObject(Capitulo.class.getName(),
				idCapitulo);
		Novedad nov = new Novedad();
		nov.setFecha(new Date());
		nov.setTitulo(titulo);
		nov.setDescripcion(descripcion);
		this.saveObject(nov, user);
		c.getNovedades().add(nov);
		this.saveObject(c, user);
	}

	/**
	 * Elimina una novedad. Desvincula del capítulo y lo actualiza
	 * 
	 * @param user
	 * @param idCapitulo
	 * @param idNovedad
	 * @throws Exception
	 */
	public void eliminarNovedad(String user, long idCapitulo, long idNovedad)
			throws Exception {
		Capitulo c = (Capitulo) this.getObject(Capitulo.class.getName(),
				idCapitulo);

		boolean eliminado = false;

		for (int i = 0; ((eliminado == false) && (i < c.getNovedades().size())); i++) {
			Novedad nov = c.getNovedades().get(i);
			if (nov.getId().longValue() == idNovedad) {
				// eliminar
				this.deleteObject(nov);
				c.getNovedades().remove(i);
				this.saveObject(c, user);
			
				eliminado = true;
			}
		}

	}

	// ==============================================
	// ==============================================

	public static void main(String[] args) {
		try {

			RegisterDomain rr = RegisterDomain.getInstance();

			Capitulo c1 = new Capitulo();
			c1.setCodigo("c1");

			Acceso a1 = new Acceso();
			a1.setNombre("a1");
			rr.saveObject(a1, "pepe");

			Acceso a2 = new Acceso();
			a2.setNombre("a2");
			rr.saveObject(a2, "pepe");

			Acceso a3 = new Acceso();
			a3.setNombre("a3");
			rr.saveObject(a3, "pepe");

			a1.getCapitulos().add(c1);
			c1.setAdministrador(a1);

			a2.getCapitulos().add(c1);
			a3.getCapitulos().add(c1);

			rr.saveObject(c1, "pw");
			rr.saveObject(a1, "pepe");
			rr.saveObject(a2, "pepe");
			rr.saveObject(a3, "pepe");

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
